package com.ncst.backend.service;

import com.ncst.backend.common.PageResult;
import com.ncst.backend.domain.Register;
import com.ncst.backend.domain.MedicalRecord;
import com.ncst.backend.domain.MedicalTechnology;
import com.ncst.backend.domain.vo.RegisterPage;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 挂号服务接口
 */
public interface RegisterService {
    Register getById(Integer id);
    List<Register> getAll();
    List<Register> getByCondition(Register register);
    List<RegisterPage> getByPage(Integer pageNum, Integer pageSize);
    List<RegisterPage> getByPage(Integer pageNum, Integer pageSize, Register register, String startDate, String endDate);
    PageResult<RegisterPage> page(Integer pageNum, Integer pageSize, Register condition, String startDate, String endDate);
    Long countAll();
    Long countByCondition(Register register);
    boolean save(Register register);
    boolean saveBatch(List<Register> list);
    boolean updateById(Register register);
    boolean removeById(Integer id);
    boolean removeByIds(List<Integer> ids);
    
    /**
     * 获取今日患者统计数据
     * @return 包含各类统计数据的Map
     */
    Map<String, Object> getTodayStats();

    /** 通过病历号或姓名模糊匹配病历记录 */
    List<MedicalRecord> getMedicalRecordByCaseNumberOrRealName(String caseNumber, String realName);

    /** 通过病历号或姓名模糊匹配医技项目（示例：联查病历后关联医技） */
    List<MedicalTechnology> getMedicalTechnologyByCaseNumberOrRealName(String caseNumber, String realName);
    
    /**
     * 根据病历号或姓名查询患者信息
     * @param caseNumber 病历号
     * @param realName 姓名
     * @return 患者信息
     */
    Register getByCaseNumberOrRealName(String caseNumber, String realName);

    Integer ChargeSettle(List<Integer> items, Integer patientId, BigDecimal totalAmount);
}
